XSS(Cross Site Scripting)
✒️ 2025-05-16 09:08 내용 수정
악의적인 사용자가 웹 사이트에 악성 Script를 삽입할 수 있는 취약점
- 참고 자료 : wikipedia XSS
- 다른 사용자에게 보여지는 Web 페이지에 client-side script를 주입하여 공격한다.
- 웹 애플리케이션이 사용자로부터 받은 입력 값을 검사하지 않고 사용할 경우 나타날 수 있다.
- 사용자의 cookie, session 등의 정보 탈취 목적으로 수행되거나, 자동으로 비정상적 기능을 수행하도록 할 수 있다.
유형
- XSS 기법 유형을 나누는 정형화된 기준은 없으나, 전문가들은 크게 비 지속적 기법과 지속적 기법 유형으로 기법들을 구분했다.
- 몇몇에선 전통적 기법(서버 사이드 코드 결점)과 DOM 기반(클라이언트 사이드 코드 결점)으로 나누기도 한다.
- 비 지속적 기법(Non-persistent) / 반사형 XSS(Reflected XSS)
- 가장 일반적인 웹 취약점 타입이다.
- 웹 클라이언트로부터 제공된 HTTP query parameter와 같은 데이터가 server-side script에서 즉시 사용되어 결과 페이지로 보여지는 방식이다.
- 검증 되지 않은 사용자가 URL parameter나 HTTP 요청 header의 정보를 수정하여 공격할 수 있다.
- 지속적 기법(Persistent) / 저장형 XSS(Stored XSS)
- 공격자가 설정한 데이터가 서버에 저장되어 다른 사용자가 일반적인 브라우징 과정을 수행할 때 평범한 페이지에 영구적으로 보여진다.
- 이 기법은 공격 대상을 따로 지정하거나 피해자를 third-party 웹 사이트로 유인할 필요 없이 서버에 저장된 악성 script가 자동으로 실행되기 때문에 다른 기법들보다 매우 위험하다.
- DOM 기반 XSS(DOM-based XSS)
- 이 기법은 악성 데이터가 웹 서버에 영향을 주는 대신 Javascript 코드에 반영되어 클라이언트 사이드에 직접 영향을 준다.
- 기존 XSS 취약점들은 서버 사이드에서 모든 데이터를 처리하는 애플리케이션에서 발견되었는데, 이 방식은 사용자 경험 향상에 대한 요구가 증가로 클라이언트 측에서 presentation 로직을 처리되는 애플리케이션의 인기와 함께 사용자 입력 값 처리와 렌더링 처리를 할 수 있는 Javascript 코드를 사용하는 방식으로 등장했다.
방지법
- 여러 방지법이 존재하는데, 그 중에서 몇 개만 간추려서 정리했다.
- 한 방법이 모든 유형의 XSS 공격을 막을 수 있는 것은 아니기에 각 방법의 적용 효과와 단점을 고려해서 여러 방법을 조합하는 것으로 적용해야 한다.
- HTML sanitization 엔진을 사용하여 신뢰할 수 없는 HTML 입력에 유효성 검사를 실행한다.
- 참고 자료 : HTML sanitization, sanitize-html 참고.
- cookie 설정 시 보안 관련 설정을 적용한다.
- session cookie와 사용자가 처음 로그인 한 IP 주소를 연결해 특정 IP를 가진 cookie만 허용하도록 설정할 수 있다.
HttpOnly와secure옵션를 사용하여 클라이언트 사이드에서 cookie를 읽지 못하게 설정한다.SameSite=Strict또는SameSite=Lax설정을 적용한다.Strict는 모든 Cross-origin 요청에 cookie 전송을 방지Lax는 안전한 Cross-origin(GET, OPTIONS, TRACE)에서 cookie 전송